package com.gxa.clientproduct.controller;


import com.gxa.clientproduct.exception.BusinessException;
import com.gxa.clientproduct.utils.JsonResult;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.UUID;

/**
 * @Description: TOOD
 * @ClassName: TicketController
 * @Author: ${陈柯宇}
 * Date: 2020/10/20 9:56
 * @Version: 1.0
 */

@RestController
@RequestMapping("/upload")
public class UploadController {



    @PostMapping("/upload")
    public Map upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws Exception{
        //判断文件大小是否符合要求（不能超过1M）
        //file.length() 字节数
        //file.getSize() 文件字节大小
      JsonResult jsonResult=new JsonResult();
        if (file.isEmpty()) {
            throw new BusinessException("图片不能为空");
        }

        if(file.getSize()> 1024*1024) {
            jsonResult.put("message", "图片文件不能大于1M");
        }

        //再springboot项目中，如何把上传的文件保存在指定的位置
        //目标路劲： /img/fileName
        //真实路劲：/usr/upload/img
        //在目标路劲和真实路劲之间进行关联
        //获取后缀
        String originalFilename = file.getOriginalFilename();
        String subfix = originalFilename.substring(originalFilename.indexOf(".")+1);
        if (subfix.equals("jpg") || subfix.equals("jpeg") || subfix.equals("bmp") || subfix.equals("gif") || subfix.equals("png") ){
//新文件后缀

            //生成随机名
            String fileName = UUID.randomUUID().toString().replace("-","")+"."+subfix;

            //目标文件名
            // 通过request获取当前程序的根路径"/"
            String path = request.getServletContext().getRealPath("/");
            System.out.println(path);
            //String dest = path+"/static/img/"+fileName;
            String dest =path+"root/product_img/"+fileName;

            System.out.println("dest:"+dest);  //输出文件完整地址

            File uploadFile = new File(dest);
            //核心操作(含有异常操作, 利用异常设定状态码(和前端约定)
            // 此处应当和ExceptionController结合, 当try执行成功则设定状态码0
            // 出现异常则设定其他
            // 再将异常信息结合BusinessException抛出, 交给ExceptionController处理
            try {
                file.transferTo(uploadFile);
            } catch (IOException e) {
                //e.printStackTrace();
                throw e;
            }
            //返回给前端

            // 返回服务器保存后的文件名
            jsonResult.put("file",fileName);
            jsonResult.setCode("1");

        }else {
            throw  new BusinessException("你的文件格式不对");
        }

        return jsonResult.getValues();
    }

}
